import { defineConfig } from 'eslint/config'
import tseslint from '@typescript-eslint/eslint-plugin'
import tsParser from '@typescript-eslint/parser'
import eslintPluginVue from 'eslint-plugin-vue'
import vueParser from 'vue-eslint-parser'
import eslintConfigPrettier from 'eslint-config-prettier'

export default defineConfig([
  // 1. 忽略不需要检查的文件（保留，避免检查无关文件）
  {
    ignores: ['**/node_modules', '**/dist', '**/out', '**/.git', '**/.github']
  },

  // 2. 全局规则：仅保留JS核心语法/用法错误
  {
    languageOptions: {
      ecmaVersion: 'latest',
      sourceType: 'module'
    },
    rules: {
      // 仅保留可能导致运行时错误的核心规则
      'no-undef': 'error', // 未定义变量（JS语法级错误）
      'no-unused-vars': 'off', // 交给TS处理（TS检查更精准）
      'eqeqeq': ['error', 'always'], // 禁止使用==（可能导致逻辑错误）
      'no-constant-condition': 'error', // 禁止恒为true/false的条件（如if(true)死循环）
      'no-empty': 'error', // 禁止空代码块（如空if/for，可能是逻辑错误）
      'no-extra-semi': 'error', // 多余的分号（语法冗余错误）
      'no-func-assign': 'error', // 禁止给函数名重新赋值（用法错误）
      'no-obj-calls': 'error', // 禁止把内置对象当函数调用（如Math()，语法错误）
      'no-sparse-arrays': 'error', // 禁止稀疏数组（如[1,,3]，语法歧义错误）
      'valid-typeof': 'error' // 确保typeof比较正确（如typeof x === 'undefiend'拼写错误）
    }
  },

  // 3. TypeScript规则：仅保留TS语法/类型用法错误
  {
    files: ['**/*.{ts,mts,tsx}'],
    languageOptions: {
      parser: tsParser,
      parserOptions: {
        // 解决文件不在TSConfig中的报错（用专门的ESLint配置覆盖所有文件）
        project: './tsconfig.eslint.json',
        tsconfigRootDir: __dirname
      }
    },
    plugins: {
      '@typescript-eslint': tseslint
    },
    rules: {
      // 仅保留TS核心语法和类型用法错误规则
      '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], // 未使用变量（可能是逻辑疏忽）
      '@typescript-eslint/ban-types': 'off', // 允许使用any等类型（不限制）
      '@typescript-eslint/no-explicit-any': 'off', // 不警告any（彻底闭嘴）
      '@typescript-eslint/explicit-function-return-type': 'off', // 不强制返回值类型
      '@typescript-eslint/explicit-module-boundary-types': 'off', // 不强制导出类型
      '@typescript-eslint/no-non-null-assertion': 'off', // 允许!非空断言
      '@typescript-eslint/ban-ts-comment': 'off', // 允许// @ts-ignore
      '@typescript-eslint/no-unsafe-assignment': 'off', // 不检查any赋值安全性
      '@typescript-eslint/no-unsafe-member-access': 'off', // 不检查any成员访问
      '@typescript-eslint/no-unsafe-call': 'off' // 不检查any函数调用
    }
  },

  // 4. Vue规则：仅保留模板/组件语法错误
  {
    files: ['**/*.vue'],
    languageOptions: {
      parser: vueParser,
      parserOptions: {
        ecmaFeatures: { jsx: true },
        extraFileExtensions: ['.vue'],
        parser: tsParser // Vue脚本部分用TS解析器
      }
    },
    plugins: {
      vue: eslintPluginVue
    },
    rules: {
      // 仅保留Vue模板语法错误规则（必须改的问题）
      'vue/no-parsing-error': 'error', // 模板解析错误（如标签未闭合）
      'vue/valid-template-root': 'error', // 模板根元素必须合法（如不能多个根元素）
      'vue/valid-v-for': 'error', // v-for用法错误（如缺少key）
      'vue/valid-v-if': 'error', // v-if用法错误（如与v-for冲突）
      'vue/valid-v-else-if': 'error', // v-else-if语法错误
      'vue/valid-v-else': 'error', // v-else语法错误
      'vue/valid-v-model': 'error', // v-model用法错误（如绑定非响应式数据）
      'vue/valid-v-on': 'error', // v-on事件绑定错误（如方法不存在）
      'vue/valid-v-bind': 'error', // v-bind绑定错误（如属性不存在）

      // 关闭所有非语法错误的规则（风格/建议类全部闭嘴）
      'vue/multi-word-component-names': 'off',
      'vue/require-default-prop': 'off',
      'vue/attribute-hyphenation': 'off',
      'vue/html-self-closing': 'off',
      'vue/singleline-html-element-content-newline': 'off',
      'vue/max-attributes-per-line': 'off',
      'vue/no-v-html': 'off',
      'vue/order-in-components': 'off'
    }
  },

  // 5. 与Prettier兼容（保留，避免格式冲突）
  eslintConfigPrettier
])
